#include <QKeyEvent>
#include <QMessageBox>
#include "MainWindow.h"
#include "ui_MainWindow.h"

/**
 * 构造方法。
 * @param parent    父窗口
 */
MainWindow::MainWindow(QWidget* parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    mGameBoard(this, Const::GAME_BOARD_X, Const::GAME_BOARD_Y, Const::GAME_BOARD_WIDTH, Const::GAME_BOARD_HEIGHT),
    mGame(mGameBoard.getBitmap(), &mGameBoard) {
    ui->setupUi(this);

    // 关联信号与槽
    QMainWindow::connect(&mGame, SIGNAL(UM_GAME_OVER(bool)), SLOT(onGameOver(bool)));
}

/**
 * 析构方法。
 */
MainWindow::~MainWindow() {
    delete ui;
}

/**
 * 按键事件的响应方法。
 * @param e 事件相关信息
 */
void MainWindow::keyPressEvent(QKeyEvent* e) {
    mGame.onKeyPressed(e->key());
}

/**
 * "开始"按钮的单击响应方法。
 */
void MainWindow::on_buttonStart_clicked() {
    ui->buttonStart->setText(tr("IDS_RESTART"));
    mGame.start();
    QMainWindow::setFocus();
}

/**
 * 游戏结束事件的响应方法。
 * @param isWon 胜利则为 true，否则为 false
 */
void MainWindow::onGameOver(bool isWon) {
    if (isWon) {
        QMessageBox::information(this, " ", tr("IDS_WON"));
    } else {
        QMessageBox::information(this, " ", tr("IDS_LOST"));
    }

    ui->buttonStart->setText(tr("IDS_START"));
}
